#include <bits/stdc++.h>
#define int long long
using namespace std;

// 计算两个前缀之间 差的前缀的个数
int get_step(int n, int n1, int n2){
	int cnt = 0;
	while(n1 <= n){
		// 注意这里面最终计算的结果 cnt 是 [n1, n2] 之间的个数, 闭区间
		// 别看使用的 是 n2 , 原本应该是  n2 + 1 - n1 , 但是由于 原本  n1 是算过了的, 所以最终 cnt 需要 -1, 两者抵消, 变为现在的样子了
		cnt += min(n+1, n2)-n1; // 注意 计算个数时, 不能直接取 n1~n2, 因为可能 n < n2
		// 进一步细化, 求出 差的前缀的个数
		// 比如 之前求出的 10 和 20 之间差了 10 11 12 13... 共 11 个
		// 后面需要求出 100 和 200 之间差了 101 102 103 ... 共 101 个, 但是由于 n1 之前已经算过了, 所以 cnt - 1, 
		n1 *= 10;
		n2 *= 10;
	}
	return cnt;
}

int get_kth(int n, int k){
	int cur = 1; // 表示当前遍历到的前缀
	k--; // 当前还需要多少个值, 首先 1 一定是 占了一个位置
	while(k){
		// k != 0 时进行寻找
		int steps =  get_step(n, cur, cur+1); // 找 cur 与 cur + 1 之间隔的数字个数
		if (steps <= k) {
			// 不足 k 个, 或者正好等于 k 个
			// 直接 更新 cur
			cur ++;
			k -= steps;
		} else {
			// 超过了 k 个
			// 说明不能直接更新前缀
			// 而是需要将前缀 进一步细化
			cur *= 10;
			k--; // 每次更新前缀时, 都出现了一个新的前缀 , 所以 k-1
		}
	}
	return cur;
}


void solve(){
	int n, k;
	cin >> n >> k;
	int ans = get_kth(n, k);
	cout << ans << '\n';
}


signed main(){
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	int t;
	t=1;
	while(t--){
		solve();
	}
	return 0;
}
